/*
 * Класс-сабмиттер, показывает форму, делает сабмит, убирает форму.
 * Один момент. Сабмиттер не содержит элемента, который умеет его самого закрывать. Так уж его всегда рисовали.
 * Закрывает его всегда тот, кто его вызвал. Это может быть контроллер контейнера комментариев или какой-нибудь комментарий.
 * В любом случае когда происходит сабмит формы, сабмиттер вызывает у родительского класса метод onAnswerEnd().
 * Который как раз может либо закрыть сабмиттер либо еще что-то с ним сделать.
 * 
 * @author Alexander Sibiryakov
 */
function CommentSubmit(parent_object) {
	this.parent_obj = parent_object;
	this.parent_oid = 0; // родительский коммент, по умолчанию его нет, значит коммент адресован итему
	this.ccontainer = null;
	this.item_oid = null;
	this.is_use_tmp_container = null;
	
	this._view = new CommentSubmitView();
	
	var submitter_html = null;
	
	/*
	 * Для сабмита, чтобы потом сообщить контейнеру о том, что у нас есть новый комментарий
	 */
	this.setCContainer = function(obj) {
		this.ccontainer = obj;
	}
	
	this.setItemOid = function(oid) {
		this.item_oid = oid;
	}
	
	this.setParentOid = function(oid) {
		this.parent_oid = oid;
	}
	
	this.setHtml = function (html) {
		submitter_html = html;
	}
	
	/*
	 * Загружает форму сабмита и сохраняет ее внутрь экземпляра
	 */
	this.load = function() {
		cp.set_env_object(this);
		cp.call(get__Url('/ajax'), 'ajax_getSubmitForm', function(result) { 
				if (result.ajaxResponse['0'].submit_form) {
					this.setHtml(result.ajaxResponse['0'].submit_form['0'].data);
					this.show(); // передает управление в этот же обработчик				
					
				}
			}, this.item_oid);
	}

	/*
	 * Выводит сабмиттер внутрь родительского элемента
	 */
	this.show = function(use_temp_container) { 
		if (submitter_html!=null) {
			
			this._view.setParentElt( this.parent_obj.getSelf() );
			this._view.insertSubmitterHtml( submitter_html );
			
			var pid = this._view.getParentOid();
			
			if (pid*1 > 0) this.setParentOid( pid ); // если id-шник чисто из цифр состоит, то эта проверка - true
			
			// повесит обработчик на кнопку которая сделает сабмит
			jQuery(this._view.getSubmitBtn()).bind("click", this, function(event) {
				event.preventDefault();
				event.data.submit();
			});
			
			if (this._view.getFormElt().length == 0) { 
				alert("Нет формы. Попробуйте перезагрузить страницу. Если не поможет, то пишите разработчикам/владельцам ресурса."); 
				}
			
			this._view.turnOnTinyMCE();
			
		} else {
			this.is_use_tmp_container = use_temp_container;			
			this.load();
		}
	}
	
	this.submit = function() {
		var ctext = this._view.getCommentText();
		
		cp.set_env_object(this);
		cp.call(window.submit_url, 'ajax_submit_comment', 
			function (result) { 
				if (result.ajaxResponse['0'].status['0'].data=='0') {
					// alert("коммент принят");
					// Сказать комменту, чтобы убрал сабмитер и сообщил контейнеру что на этом месте что-то появилось
					this.onSubmit(result.ajaxResponse['0'].comment_oid['0'].data);
				} else {
					alert('Статус ошибки '+result.ajaxResponse['0'].status['0'].data);
				}

			}, 
			this.item_oid,
			this.parent_oid, 
			ctext
		);
	}
	
	/*
	 * Вызывается при сабмите. Загружает с сервера html нового комментария и выводит его.
	 */
	this.onSubmit = function(comment_oid) {
		this._view.cleanTinyMce();
		
		this.parent_obj.onAnswerEnd();
		
		cp.set_env_object(this);
		cp.call(get__Url('/ajax'), 'ajax_getComment', function(result) { 
			this.ccontainer.insertHtmlComments(
				result.ajaxResponse['0'].html['0'].data, 
				this.parent_obj.getNewCommentPrevElt(), 
				1
			);
			if (this.is_use_tmp_container) this.addToTemporary(result.ajaxResponse['0'].html['0'].data);
		}, comment_oid);
		
	}
	
	/*
	 * убрать сабмиттер
	 */
	this.remove = function() {
		// убрать Tinymce его методами
		this._view.turnOffTinyMce();
		this._view.removeSubmitForm();
		if (this.is_use_tmp_container) this._view.removeTemporaryContainer();
	}
	
	/*
	 * Добавить html комментария во временный контейнер.
	 * Временный выводится для того чтобы информировать пользователя о том, что его действия завершаются успешно.
	 * Появляется он не всегда.
	 * 
	 */
	this.addToTemporary = function(html) {
		if (temporary_cnt==0) {
			// надо создать временный контейнер
			this._view.createTemporaryContainer();
		}
		
		this._view.addToTemporaryContainer(html);
		temporary_cnt++;
		
	}
	var temporary_cnt = 0;
	
}
